package fr.p10.miage.robot;

import java.util.ArrayList;

public class Robot implements Runnable {
	int idRobot;
	int niveauBatterie;
	ArrayList<Tache> lesTaches;
	Information infoRobot;
	Tache tacheEnCours;
	Slot slotEnPlace;

	public Robot(int idRobot, ArrayList<Tache> lesTaches) {
		super();
		this.lesTaches = lesTaches;
		this.idRobot = idRobot;
		this.niveauBatterie = 100;
		this.infoRobot = new Information();
	}

	@Override
	public void run() {
		// ** On parcoure toute les taches du robot
		for (final Tache t : this.lesTaches) {
			if (this.niveauBatterie < t.getConsommation()) {
				this.tacheEnCours = null;
				Base.getInstance().placerRobot(this);
			}
			this.faireTache(t);
		}
	}

	public void faireTache(Tache t) {
		// ** On indique la tache en cours
		this.tacheEnCours = t;
		// ** On execute le tri en enregistrant le temps
		long time = System.currentTimeMillis();
		t.executer();
		time = System.currentTimeMillis() - time;
		// ** On met a jour les infos
		this.infoRobot.ajoutTempsMoyen(t, time);
		this.infoRobot.AjoutTacheAccomplie();
		// ** On decrement le niveau de batterie/
		this.niveauBatterie -= t.getConsommation();
	}

	public int getIdRobot() {
		return this.idRobot;
	}

	public Information getInfoRobot() {
		return this.infoRobot;
	}

	public ArrayList<Tache> getLesTaches() {
		return this.lesTaches;
	}

	public int getNiveauBatterie() {
		return this.niveauBatterie;
	}

	public Slot getSlotEnPlace() {
		return this.slotEnPlace;
	}

	public void batteriePleine() {
		this.niveauBatterie = 100;
	}

	public void setNiveauBatterie(int niveauBatterie) {
		this.niveauBatterie = niveauBatterie;
	}

	public void setSlotEnPlace(Slot slotEnPlace) {
		this.slotEnPlace = slotEnPlace;
	}

	@Override
	public String toString() {
		String etat;

		if (this.slotEnPlace != null) {
			if (this.slotEnPlace instanceof SlotAttente) {
				etat = " en attente sur le slot " + this.slotEnPlace.idSlot;
			} else {
				etat = " en charge";
			}
		} else if (this.tacheEnCours != null) {
			etat = " en train de " + this.tacheEnCours.getNomTache();
		} else {
			etat = " Plus de batterie pas de place en attente";
		}
		return "* Robot " + this.idRobot + " :\n" + "\t- Niveau de batterie : " + this.niveauBatterie + "%\n" + "\t- Etat : " + etat + "\n"
				+ "\t- Nombre taches restantes :" + (Project42.NB_TACHES - this.infoRobot.nbTacheAccomplie);
	}
}